# range(a,b,c)的3个参数，表示开始，结束和步长
# 开始: 计数从a开始。默认是从0开始
# 结束: 计数到b结束，但不包括b
# 步长：默认为1，不过可以对参数c进行修改步长

# 项目：使用for循环和range()方法依次输出从1到99(包含)的奇数
for i in range(1, 100):
    if i % 2 != 0:
        print(i)
    else:
        continue

for i in range(1, 100, 2):
    print(i)

# 项目：计算整数0到1000相加的和并输出结果，并用计数器统计累加的次数并输出总共累加了xx次
total = 0
count = 0
for i in range(0, 1001):
    total = total + i
    count = count + 1
print(total)
print(f"总共累加了{count}次")

names = ["Bob", "Ann", "Sunny"]
count = 0
for name in names:
    count = count + 1
print(f"第{count}名是{name}")  # 结果是循环的最后一个值，name是临时变量，可以不定义

# 项目：Susu写了一款自动交易软件，抢购热门的茅台，起价2000，
# 滚动执行单次加价100元，当价格不超过（不包含）3000时自动输出：以xx价格下单抢购
number = 2000
while number < 3000:
     print(f"以{number}价格下单抢购")
     number = number + 100
# 如果将第61行和第62行代码位置互换，就会导致“以2000元价格下单抢购”情况缺失

# 项目：得分列表score_list记录了每个游戏关卡的得分情况
# 使用while循环实现，依次输出列表中的得分，
# 如果得分输出了5分，就接着输出"game over"并停止输出列表中剩余的得分
score_list = [20, 30, 5, 1, 5, 40]
count = 0
while True:
    print(score_list[count])
    if score_list[count] == 5:
        print("game over")
        break
    count = count + 1

# 项目：需要将得分列表score_list中的游戏关卡得分累加起来并赋值给变量total，
# 但要求得分小于6就跳过不计分，输出最后的得分total
score_list = [20,30,5,1,5,10]
total = 0
for score in score_list:
    if score < 6:
        continue
    total = total +score
print(total)             #若缩进4个字符便会进入for循环，输出多个循环的值

# 使用while循环依次输出小于（等于）5且不等于3的正整数
number = 5
while number > 0:
    if number == 3:
        number = number - 1
        continue
    print(number)
    number = number - 1

# 如何创建一个列表，其中包含前十个整数（1~10）的平方？
squares = []        # 法一
for value in range(1,11):
    squares.append(value**2)
print(squares)
squares = [value**2 for value in range(1,11)]    # 法二，列表推导式
print(squares)

# while循环语句,从1~100的奇数和
my_sum = 0
n = 1
while 1 <= n <= 100:
    if n % 2 != 0:
        my_sum += n
    n += 1
print(f'和为：{my_sum}')

# 打印九九乘法表
i = 1
while i <= 9:          #代表9行
    j = 1
    while j <= i:
        print(f'{j}*{i}={j * i}', end='\t')
        j += 1
    i += 1
    print()

i = 1
j = 1
for i in range(1, 10):              #for循环中变量名不影响赋值过程和输出结果，可以将变量命名i，j，t等等
    for j in range(1, i+1):         #i+1比i更合适全面
        print(f'{j}*{i}={i*j}', end='\t')
    print()

i = 1
while i <= 9:
    j = 1
    while True:
        if j > i :
            break
        print(f'{j}*{i}={j * i}', end='\t')
        j += 1
    i += 1
    print()

# range函数：生成整数可迭代对象   语法:[开始点，结束点，间隔] (包头不包尾)
# for循环,从1~100的奇数和
my_sum = 0
for n in range(1, 100, 2):  # n是临时变量，不需要定义就能用
    my_sum += n
print(f'结果是：{my_sum}')  # print顶格写，不然会进for循环无法打印结果

# 从1~100的奇数和
my_sum = 0
for n in range(100):  # 冒号':'别写成中文的了
    if n % 2 != 0:
        my_sum += n
print(f'结果是：{my_sum}')

# break循环（跳出循环结构）,从1~100的奇数和
n = 0
my_sum = 0  # my_sum需要初始化
while True:
    n += 1
    if n > 100:
        break
    if n % 2 != 0:
        my_sum += n
print(f'结果是：{my_sum}')

# continue循环（跳出本次循环，进行下一次循环） ,从1~100的奇数和
n = 0
my_sum = 0
for n in range(100):
    if n % 2 == 0:
        continue
    my_sum += n
print(f'结果是：{my_sum}')
# break和continue只用于循环语句中，在嵌套循环中只对最内层循环有效

'''
for...else...结构
for i in range(n):
    循环体
else:
    如果上面的for循环0~n-1没有中断(break),则进入else条件
'''
# for...else...结构的简单应用
for i in range(3):
    # 提示输入用户名和密码
    user_name = input("\n用户名：")
    pass_word = input("密码：")
    # 判断输入的是否正确
    if user_name == "admin" and pass_word == "6789":
        print("账号登录成功！")
        break
    print("账号密码登录有误！")
else:
    print("账号被锁定！")

# 打印等差数列雪花
"""
法一：
n = 1
while n <= 5:
    print("*" * n)
    n += 1
"""
# 法二：
n = 1
while n <= 5:   # 控制行数
    m = 0
    while m < n:
        print("*",end=" ")
        m += 1
    n += 1
    print()

# 倒金字塔雪花
n = 1
while n <= 5:   # 控制行数
    m = 5
    while m >= n:
        print("*",end=" ")   # 内层控制的是打印*，调整end是为了不换行
        m -= 1
    n += 1
    print()